module.exports = (opt, app) => {
    return async function errorHandle(ctx, next) {
        try {
            await next();
        } catch (err) {
            // 所有的异常都在 app 上触发 error 事件，生成记录一条错误日志
            ctx.app.emit('error', err, ctx);
            const status = err.status || 500;
            // 生产环境 500 时，不返回具体错误信息，因为可能包含敏感信息
            const error = status === 500 && ctx.app.config.env === 'prod'
                ? 'Server Eoorr'
                : err.message;
            ctx.body = { code: status, msg: error };
            if (status === 422) {
                ctx.body.detail = err.errors;
            }
            ctx.status = status;
        }
    }
}